#ifndef _MENSAJE_H_
#define _MENSAJE_H_

#include <vector>
#include "definiciones.h"

#define MENSAJE_LONG_TEXTO_MAX 150
#define MENSAJE_CONTROL_CONEXION    1
#define MENSAJE_CONTROL_DESCONEXION 2


struct Mensaje{
    protected:
    char cabecera[10];
    int tipo;
    public:
    Mensaje();
    bool good();
};

struct MensajeSYNC:Mensaje{
    MensajeSYNC();
    long idUsuario;
    bool good();
};

struct MensajeTXT:Mensaje{
    MensajeTXT();
    long idUsuario;
    long idConversacion;
    unsigned longitud;
    char texto[MENSAJE_LONG_TEXTO_MAX];
    static std::vector<MensajeTXT> generar(long idUsuario, long idConversacion, const char* texto, unsigned length);
    bool good();
};

struct MensajeControl:Mensaje{
    MensajeControl();
    long idUsuario;
    long idConversacion;
    char nombreUsuario[MAX_LONG_NOMBRE_USUARIO];
    char evento;
    char host[MAX_LONG_HOST];
    bool esConexion();
    bool esDesconexion();
    bool good();
};

struct MensajeRed:Mensaje{
    MensajeRed();
    long idConversacion;
};

#endif /* _MENSAJE_H_ */
